package com.cloud.code.dynaproxy.aop;

import java.io.InputStream;

/**
 * 这个测试类，实现了aop切面编程地简易实现。
 * 1.在不修改业务类BaoMaCar的run方法的情况下， 通过动态代理对象ProxyCar, 将自定义实现MyAdvice加入到run方法的执行前后，来实现run方法的增强。
 * aop可以实现的功能：
 *  日志，权限，事务等
 */
public class Test {

    public static void main(String[] args) {
//        BaoMaCar baoMa = new BaoMaCar();
//        MyAdvice myAdvice = new MyAdvice();
//        ProxyCar proxyCar = new ProxyCar();
//        Car proxyObject = (Car) proxyCar.getProxyObject(baoMa, myAdvice);
//        proxyObject.run();
        //通过线程类加载器加载配置文件
        InputStream resourceAsStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("com/cloud/code/dynaproxy/aop/bean.properties");
        BeanFactory beanFactory = new BeanFactory(resourceAsStream);

        ProxyCar proxyCar = (ProxyCar) beanFactory.getBean("bean");
        Car car = (Car) proxyCar.getProxyObject();
        car.run();
    }
}
